package test

import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import modelo.Curso
import modelo.Docente
import modelo.Estudiante
import modelo.ResultadoCursada
import modelo.Materia

class TestDocente {
  
  var estudiante1 : Estudiante = _
  var estudiante2 : Estudiante = _
  var docente : Docente = _
  var materia : Materia = _
  
  @Before def initialize {
    estudiante1 = new Estudiante("Estudiante1")
    estudiante2 = new Estudiante("Estudiante2")
    docente = new Docente("Docente")
    materia = new Materia("POO3")
    // Agregue Materia para que no rompiera cuando se instancia un curso
 		var curso1 = new Curso(materia,null,null)
 		var curso2 = new Curso(materia,null,null)
 		var curso3 = new Curso(materia,null,null)
        var curso4 = new Curso(materia,null,null)
        curso1.mapEstudianteResultado.put(estudiante1, new ResultadoCursada(false,0,curso1))
 		curso2.mapEstudianteResultado.put(estudiante1, new ResultadoCursada(true,3,curso2))
 		curso3.mapEstudianteResultado.put(estudiante1, new ResultadoCursada(true,8,curso3))
 		curso4.mapEstudianteResultado.put(estudiante1, new ResultadoCursada(true,10,curso4))
 		
 		curso1.mapEstudianteResultado.put(estudiante2, new ResultadoCursada(false,0,curso1))
 		curso2.mapEstudianteResultado.put(estudiante2, new ResultadoCursada(false,0,curso2))
 		curso3.mapEstudianteResultado.put(estudiante2, new ResultadoCursada(true,2,curso3))
 		curso4.mapEstudianteResultado.put(estudiante2, new ResultadoCursada(true,9,curso4))
 		
 		estudiante1.cursos = List(curso1,curso2,curso3,curso4)
 		estudiante2.cursos = List(curso1,curso2,curso3,curso4)
 		docente.cursos = List(curso1,curso2,curso3,curso4)
  }
  
  @Test def promedios {
  	
    assertEquals(docente.promedioConAplazos,6)
  	assertEquals(docente.promedioSinAplazos,9)
  }
  
  @Test def pocentajes {
  	assertEquals(docente.porcentajeDeAprobadosSobreIniciados,37)
  }
  
  @Test def cantidades {
  	assertEquals(docente.cantidadDeCursadasAprobadas,3)
  	assertEquals(docente.cantidadDeCursadasAbandonadas,3)
  }
  
  @Test def tablaDeNotas {
  	assertEquals(docente.tablaDeNotas.size,5) // no cuentan los abandonos
  	assertEquals(docente.tablaDeNotas.get(3),Some(1))
  	assertEquals(docente.tablaDeNotas.get(8),Some(1))
  	assertEquals(docente.tablaDeNotas.get(10),Some(1))

  }
  
  @Test def maximaNotaAlcanzadaMinNVeces {
    assertEquals(docente.maximaNotaAlcanzadaMinNVeces(1),10)
    assertEquals(docente.maximaNotaAlcanzadaMinNVeces(2),9)
    assertEquals(docente.maximaNotaAlcanzadaMinNVeces(3),8)
  }

}
